﻿using System;
using System.Collections.Generic;
using System.Linq;
using Norm;
using Norm.BSON.DbTypes;

public class Example2 {

    class Besitzer {
        public ObjectId _id { get; set; }
        public List<Tier> tiere { get; set; }
    }

    class Tier {
        public ObjectId _id { get; set; }
        public Rasse rasse { get; set; }
        public Besitzer besitzer { get; set; }
    }

    class Rasse {
        public ObjectId _id { get; set; }
        public String bezeichnung { get; set; }
    }

    private String connectionUrl = "mongodb://localhost/Tiere";

    public Example2() {
        Seed();
        Query();
    }

    public void Seed() {
        using (var db = Mongo.Create(connectionUrl)) {
            //db.Database.DropCollection("Tier");
            //db.Database.DropCollection("Besitzer");
            //db.Database.DropCollection("Rasse");
            var tierCollection = db.GetCollection<Tier>();
            var besitzerCollection = db.GetCollection<Besitzer>();
            var rasseCollection = db.GetCollection<Rasse>();

            var hund = new Rasse { bezeichnung = "Hund" };
            var katze = new Rasse { bezeichnung = "Katze" };
            var maus = new Rasse { bezeichnung = "Maus" };
            rasseCollection.Save(hund);
            rasseCollection.Save(katze);
            rasseCollection.Save(maus);

            var tiere = new List<Tier>();
            foreach (int index in Enumerable.Range(0, 6)) {
                var tier = new Tier { rasse = hund };
                tiere.Add(tier);
                tierCollection.Save(tier);
            }

            var besitzer = new Besitzer { };
            besitzer.tiere = tiere;
            besitzerCollection.Save(besitzer);
        }
    }

    public void Query() {
        using (var db = Mongo.Create(connectionUrl)) {
            var tierCollection = db.GetCollection<Tier>();
            var besitzerCollection = db.GetCollection<Besitzer>();
            var rasseCollection = db.GetCollection<Rasse>();

            foreach (var tier in tierCollection.AsQueryable().ToList()) {
                println(tier);
            }
        }
    }

    public void println(Object obj) {
        Console.WriteLine(obj.ToString());
    }

}
